home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / blckade.exe / BLOCKADE.DOC < prev    next >
Encoding:
Text File  |  1992-10-23  |  26.7 KB  |  991 lines

  1.  
  2.     
  3.     
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.     
  11.     
  12.     
  13.     
  14.     
  15.                               BLOCKADE (TM)
  16.                     A self checker library for C programs
  17.     
  18.     
  19.     
  20.     
  21.     
  22.     
  23.                     Copyright (C) 1991,92 Indusoft Corp.
  24.     
  25.     
  26.     
  27.     
  28.     
  29.     
  30.     
  31.     
  32.                            Indusoft Corp.
  33.                            PO. Box 26747
  34.                        Greenville, SC 29616-1747
  35.     
  36.     
  37.     
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -1-
  60.  
  61.     
  62.     
  63.     
  64.     
  65.     
  66.          OVERVIEW
  67.     
  68.          Blockade is a function library for C programmers which allows
  69.          your C programs to protect themselves against unauthorized
  70.          changes. Virus protection IMMEDIATELY comes to mind as its main
  71.          use, but there are more.
  72.     
  73.          I wrote BLOCKADE so that programs I wrote could check
  74.          themselves. Have you had those times too?  Those unexplainable
  75.          times when a program runs but has some odd behavior that makes
  76.          you suspect corruption, virus related or not.
  77.     
  78.          This happened to me when I was checking out a disk caching
  79.          utility. Files I had compiled and linked often quit running
  80.          after copying them to another disk or subdirectory. The
  81.          combination of controller, BIOS, and cache software was
  82.          causing just a few bytes of a file to be altered anytime I
  83.          copied it (and of course without warning or notice).
  84.     
  85.          After several hours of searching, I found the problem and
  86.          looked for a way to make my programs self checking. The result
  87.          was BLOCKADE.
  88.     
  89.          BLOCKADE checks every byte of your EXE or COM to insure that
  90.          changes are detected. Its algorithm is designed to be effective
  91.          but fast enough allow use in your programs.
  92.     
  93.          I also use BLOCKADE in my products to protect against
  94.          unauthorized patches to my programs and to protect my
  95.          customers from running versions of the program damaged
  96.          unintentionally.
  97.     
  98.          Blockade is easy to use.  1 major function analyses your EXE
  99.          file and returns a status code indicating whether your file has
  100.          been altered.
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -2-
  119.  
  120.     
  121.     
  122.     
  123.     
  124.          NEAT FEATURES
  125.     
  126.          * Fast operation. A 40k EXE file can check itself in less
  127.            than 3 seconds on a 12 MHZ AT.
  128.     
  129.          * Ease of use.  A few #includes and only a handful
  130.            of additions are needed to use BLOCKADE. No changes to
  131.            your program's basic structure are necessary.
  132.     
  133.          * Ability to add user data to a program "skeleton".
  134.            useful for adding customer names and serial numbers.
  135.          
  136.          * Expandable.  BLOCKADE can be modified to extend the
  137.            number and type checking methods you use.
  138.            The source code to BLOCKADE is available, allowing you to
  139.            create new checking methods unique to your application.
  140.     
  141.          
  142.          THEORY OF OPERATION
  143.     
  144.     
  145.          Blockade works via 2 pieces of code you add to your program.
  146.     
  147.          (1)  A special data structure "SIGNATUR.H", which is #include'd
  148.               in your program.  The structure reserves room for the
  149.               information BLOCKADE will need to analyze your program.
  150.     
  151.          (2)  The function blockade(), which checks your program for
  152.               alteration.
  153.     
  154.          After linking, a special program (BRAND.EXE) is run to find the
  155.          special string included by "SIGNATUR.H" in the data area of
  156.          your EXE file, calculate the checking information and overwrite
  157.          that area with the data blockade() needs to detect changes to
  158.          your file.  Once branded, your program can check itself for
  159.          changes each time it is run.
  160.     
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -3-
  178.  
  179.     
  180.     
  181.     
  182.     
  183.          I HAVE TO RUN BRAND.EXE  EACH TIME I RELINK MY APPLICATION ?
  184.     
  185.     
  186.          That's the problem I had with other products similar to
  187.          BLOCKADE. The biggest headache was time - it seemed to take
  188.          forever for them to calculate and update my program.
  189.     
  190.          To combat that, ALOT of time went into the all the utilities to
  191.          make things FAST.  For example, on an 8 MHz AT, the Brand
  192.          utility will analyze and brand a 40 K .EXE file in less than 4
  193.          seconds.
  194.     
  195.          The same thing is true for your developed applications. Nobody
  196.          wants to wait 30-40 seconds every time they start your program
  197.          while it self checks.  The check algorithm in BLOCKADE is quick.
  198.          Running from a hard disk, I doubt anyone will notice the delay.
  199.     
  200.          I leave the BLOCKADE code linked in during development - to
  201.          take into account the effect it has on speed and memory use -
  202.          but have the program ignore any error codes until my final
  203.          production link.
  204.     
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -4-
  237.  
  238.     
  239.     
  240.     
  241.          CONTENTS
  242.     
  243.     
  244.          This self extracting file should contain at least the following files:
  245.     
  246.     
  247.          blkade1.c       - the error message function used by BLOCKADE.
  248.          blkdmoms.lib    - Blockade demo library Microsoft 5.1 (Small model)
  249.          blkdmoml.lib    - Blockade demo library Microsoft 5.1 (Large model)
  250.          blkdmots.lib    - Blockade demo library Turbo C 2.01 (Small model)
  251.          blkdmotl.lib    - Blockade demo library Turbo C 2.01 (Large model)
  252.          blkdmobs.lib    - Blockade demo library Borland C++ 2.0 (Small model)
  253.          blkdmobl.lib    - Blockade demo library Borland C++ 2.0 (Large model)
  254.          brand.exe       - calculates your program's checkcode data
  255.                            and "brands" it into your .EXE file.
  256.          demo.c          - Demonstrates use of the Blockade function library.
  257.          demo.exe        - Demo program demonstrating BLOCKADE's use.
  258.          demo.mak        - Microsoft C make file for DEMO.EXE.
  259.          rundemo.bat     - Demonstrates use of the Blockade system.
  260.          mksig.exe       - Generates a SIGNATUR.H file.
  261.          signatur.h      - include file to be embedded in your program.
  262.          blkproto.h      - function prototypes for blockade functions.
  263.          userdata.dat    - a sample user data file used with DEMO.EXE.
  264.          read.me         - any last minute info.
  265.     
  266.          The file BLKDEMO.PAK is an ASCII file listing the exact files
  267.          in this distribution.
  268.     
  269.     
  270.          
  271.          COMPILER'S SUPPORTED
  272.          
  273.          The test drive of BLOCKADE version comes with libraries for
  274.          Turbo C 2.0, Borland C++ 2.0 and Microsoft C 5.x.  I don't know
  275.          if these are usable with Microsoft 6.0.  According to Borland,
  276.          the C++ libraries are NOT reliably usable with Turbo C 2.0.
  277.          However, Turbo C++ and Borland C++ libraries do seem to be
  278.          compatible.
  279.     
  280.          For now, folks with other C compilers must license the source
  281.          code and compile it themselves.  BLOCKADE and all it's support
  282.          programs are written in (almost) ANSI C so things should
  283.          compile up just fine.
  284.          
  285.          The libraries were compiled with the following options.
  286.     
  287.          For TC   :   tc  -O -G -c  -ml(or s)
  288.     
  289.          For BCC  :   bcc -O -G -c  -ml(or s)
  290.     
  291.          For MSC  :   CL /W3 /Ox /Zi  /c /AL(or S)
  292.  
  293.  
  294.  
  295.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -5-
  296.  
  297.     
  298.     
  299.     
  300.          Below is an short program illustrating the BLOCKADE system.
  301.          (This is in fact a section of the DEMO program included in your
  302.          BLOCKADE package)
  303.     
  304.     
  305.     
  306.     
  307.          /* ------------------------------------------- */
  308.     
  309.          #include "blkproto.h"   /* function prototypes              */
  310.          #include "signatur.h"   /* holds the signature string       */
  311.     
  312.          /* ------------------------------------------- */
  313.     
  314.          main(int argc, char **argv)
  315.          {
  316.            char *sp;
  317.            int stat;
  318.     
  319.            printf("Checking myself for changes..\n");
  320.     
  321.            stat = blockade( argv[0], 8000);
  322.     
  323.            printf ("Results of file self check = %d\n", stat);
  324.     
  325.            sp = get_blk_err_msg( stat);
  326.            printf("The status my self check was \"%s\". \n", sp);
  327.     
  328.            return(0);
  329.          }
  330.     
  331.     
  332.          The above example illustrates how easy it is to add self
  333.          checking to your programs.
  334.     
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -6-
  355.  
  356.     
  357.     
  358.     
  359.     
  360.          Prototype :
  361.     
  362.            int blockade( const char *filename, int buffer_size);
  363.     
  364.     
  365.          Description:
  366.     
  367.          Attempts to open "filename" and analyze it for any alterations.
  368.     
  369.          Allocates "buffer_size"  bytes of dynamic memory for disk I/O
  370.          to improve scanning performance.  Allowable buffer sizes are
  371.          from 512 to approximately 30000 bytes inclusive.  Buffer
  372.          sizes outside this range are set to the closest allowable size
  373.          within the function.
  374.     
  375.          Returns 0 if no changes are detected, else returns a non-zero
  376.          status indicating the reason for failure.  The user's
  377.          application must decide what action to take based on the
  378.          status.
  379.     
  380.     
  381.          Example:
  382.     
  383.     
  384.             include "signatur.h"
  385.             stat = blockade( "DEMO.EXE", 1024);
  386.             if (status != 0)
  387.                {
  388.                  printf(" This file has be altered !!!\n");
  389.                }
  390.     
  391.             Attempts to open DEMO.EXE located int the current directory
  392.             and analyzes it for any changes.  Allocates 1024 bytes of
  393.             dynamic memory for disk I/O to speed things along.
  394.     
  395.             Prints an error message if any alteration if found.
  396.     
  397.             Note: Although the above example if perfectly legal, it is 
  398.             better to use arg[0] rather than a hard coded program name.
  399.             The program's real name is the only one which will work 
  400.             anyway. Arg[0] provides this in all DOS versions 3.0 and 
  401.             above.
  402.     
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -7-
  414.  
  415.     
  416.     
  417.     
  418.          Prototype :
  419.     
  420.            char *get_blk_err_msg( int status );
  421.     
  422.     
  423.          Description:
  424.     
  425.            Returns a READ ONLY pointer to a message relating to
  426.            the "status" code.  This message can then be used to explain
  427.            or document the error to the user.
  428.     
  429.            NOTE: The pointed to string must not be modified.
  430.                  Unpredictable operation may result if modification
  431.                  takes place. Make a copy of this string if you intend
  432.                  to alter it.
  433.     
  434.     
  435.     
  436.          Example:
  437.     
  438.             {
  439.             int status;
  440.     
  441.             status = blockade( arg[0] ,  0);
  442.             if (status != 0)
  443.                {
  444.                  sp = get_blk_err_msg(stat);
  445.                  printf( "%s\n", sp );
  446.                }
  447.             return(status);
  448.             }
  449.     
  450.     
  451.             Attempts to open MYSELF.EXE located in subdirectory
  452.             C:\BLOCK\BIN and analyze it for any changes.
  453.     
  454.             Since 0 bytes (less than the minimum) were specified for
  455.             buffer, the minimum (BLKSIZ bytes) is used for disk
  456.             buffering.
  457.     
  458.             Prints an error message if any alteration if found or if
  459.             file cannot be successfully opened and analyzed.
  460.     
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -8-
  473.  
  474.     
  475.     
  476.          
  477.          Prototype:
  478.     
  479.            void * blk_user_pointer( int *size )
  480.          
  481.     
  482.          Description:
  483.     
  484.            Returns a void pointer to the first char of the user area,
  485.            and the size of that region.
  486.          
  487.            Use this pointer with its associated size to access your 
  488.            user data inserted when you branded your program.
  489.          
  490.            Returns NULL if no user area specified.
  491.          
  492.            NO checks are made to make sure you actually LOADED the user
  493.            area with data when you branded the program.
  494.     
  495.            Note that your user data can be anytihng, a string, or
  496.            binary data. It is up to you to cast or map it into the
  497.            format you need to use. 
  498.         
  499.          Example:
  500.     
  501.           {
  502.              char *sp;
  503.              void *vp;
  504.              int k, size;
  505.     
  506.              vp =  blk_user_pointer(  &size );    /* Find user string.*/
  507.              sp = (char *) vp;                    /* Cast to char *.  */
  508.              for (k = size; k >= 0 && *sp; k--)   /* Print out the    */
  509.                {                                  /* entire string.   */
  510.                  putch(*sp);
  511.                  sp++;
  512.                }
  513.             }
  514.     
  515.          See demo.c for another example of its use.
  516.     
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -9-
  532.  
  533.     
  534.     
  535.     
  536.          MKSIG.EXE
  537.     
  538.          "Writes" an include which includes the references and data
  539.          space Blockade needs for operation.  You do not need to run
  540.          MKSIG.EXE unless you wish to change either the reserved data
  541.          size or signature string. However, there's no harm done if
  542.          you do.
  543.     
  544.          MKSIG's syntax is as follows :
  545.     
  546.          MKSIG <"Signature string">   </o>  </us>  </c>
  547.     
  548.          "signature string"
  549.             The text BRAND.EXE should search for to locate Blockade's
  550.             data space. The default is "chk_signature". Note that the
  551.             signature string is case sensitive and spaces do count.
  552.             This string must match the string embedded in SIGNATUR.H.
  553.     
  554.          /us=XXX
  555.     
  556.             Reserve XXX bytes of user data in the blockade reserved 
  557.             area. You must use this option if you intend to add user
  558.             data to the program skeleton prior to branding it.
  559.     
  560.             You may reserve room for user data but are not required to 
  561.             add it when you brand your program.
  562.          
  563.             You may wish to stuff additional info into this region
  564.             such as serial numbers or owner's names.
  565.          
  566.             The maximum user space you may spec is 31,000 bytes.
  567.     
  568.     
  569.          /o=OUTPUT FILENAME
  570.     
  571.             The filename to use in case you don't like SIGNATUR.H.
  572.     
  573.     
  574.          EXAMPLE:
  575.     
  576.              MKSIG  "Brown Fox"  /us=128  /o=BROWN.H
  577.     
  578.           Build a signature array data statement with a signature string
  579.           of "Brown Fox".  Add enough chars to hold 128 bytes of user 
  580.           data.  Write the output to BROWN.H.  The output file is 
  581.           overwritten if it already exists.
  582.     
  583.     
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -10-
  591.  
  592.     
  593.     
  594.          BRAND.EXE
  595.     
  596.          This is the program used to "brand" your program with the
  597.          self-checking info needed at run time. You must BRAND your
  598.          program prior to distributing the program.
  599.     
  600.          Brand's syntax is as follows:
  601.     
  602.          BRAND   filename[.exe]  </s=signature_string> </n> </c>
  603.                                  </uf=USER_FILENAME>
  604.                                  </us=USER DATA STRING>
  605.     
  606.          filename
  607.             The name of the file to brand. The extension .EXE is assumed
  608.             if no extension is specified.  Note that only executable
  609.             programs may be branded since the location of the checking
  610.             information is made known to blockade() function only during
  611.             linking.
  612.     
  613.          /uf=USER_FILENAME
  614.     
  615.             Before branding, read the file USER_FILENAME and place the 
  616.             contents of the file into the user space reserved when you 
  617.             ran MKSIG.  This is the preferred method since both 
  618.             printable and binary chars may be inserted.
  619.             This switch and the /us switch may not be used together.
  620.          
  621.          /us=STRING
  622.     
  623.             Before branding, insert "STRING" into the user space 
  624.             reserved when you ran MKSIG.  Note that there can be no 
  625.             spaces in STRING (sorry, the arg parser doesn't allow it).
  626.             This switch and the /uf switch may not be used together.
  627.          
  628.          /s=signature_string (optional)
  629.     
  630.             Specifies the character string to look for. This string
  631.             must occur only once in your executable program.
  632.             The signature IS case sensitive.
  633.             The default string is "chk_signature". It must match the
  634.             string embedded in SIGNATUR.H.
  635.     
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -11-
  650.  
  651.          
  652.          
  653.          BRAND.EXE (cont.)
  654.     
  655.     
  656.          /n   (optional)
  657.     
  658.            Tells Brand not to verify the check value immediately after
  659.            it is calculated.  Using this option speeds the BRAND process
  660.            by  about 40%.  I recommend you use it once you feel
  661.            comfortable with BRAND's operation.
  662.     
  663.          
  664.          /c=function  (optional, full version only)
  665.     
  666.            Specifies that BRAND use 1 of 3 (currently) available self
  667.            checking algorithms to brand the program.  The full version
  668.            of BLOCKADE allows you to specify at link time the algorithm
  669.            you desire to use. The specification handed to BRAND via
  670.            this switch must match that used in your program, else your
  671.            blockade() function will think your executable has been
  672.            altered.
  673.     
  674.          /a  (optional)
  675.     
  676.            "Abort on any excuse."  This switch will cause BRAND to abort 
  677.            if any processing anomoly occurs, even if the error is only
  678.            warning level in nature.  For example, normally BRAND will 
  679.            beep but continue processing if your SIGNATUR.H file contains 
  680.            room for a user data string but you fail to specify one when 
  681.            you run BRAND.   If this switch is set, Brand will abort, 
  682.            assuming that you need that data if your program is to be 
  683.            right.
  684.     
  685.     
  686.           Brand will terminate with the following error levels if an error 
  687.           occurs.
  688.                1 = brand's own BLOCKADE() call returned an error.
  689.                2 = some notable but not fatal logic error
  690.                    or illogical data was passed to it.
  691.                3 = a severe error. Your program was probably not
  692.                    branded properly. 
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -12-
  709.  
  710.     
  711.     
  712.           SUPPORT
  713.     
  714.           Indusoft Corp. can be contacted as follows:
  715.     
  716.           Phone:  (803)-292-1807.
  717.                   Please leave name, phone (including area code),
  718.                   and times when you can be reached.
  719.                   Sorry, I must call COLLECT.
  720.     
  721.           Compuserve ID:  73517,1107
  722.                   I check for mail every couple of days.
  723.                   This is the preferred method.
  724.     
  725.           Prodigy ID:  GHVR03A
  726.                   I check for mail every couple of days.
  727.     
  728.     
  729.     
  730.          TERMS OF USE
  731.     
  732.          BLOCKADE is supplied for personal, private use.  Feel free to
  733.          distribute the non-registered version of BLOCKADE given these
  734.          restrictions:
  735.     
  736.          -  The program shall be supplied in its original, unmodified
  737.             form, which includes this documentation.
  738.     
  739.          -  No fee is charged other than media materials.
  740.     
  741.          -  Commercial use without a license is prohibited.
  742.     
  743.          -  No component of this package may be included, or bundled
  744.             with other  goods or services.  Exceptions may be granted
  745.             upon written request only.  This restriction also applies
  746.             to distributors, and shareware outlets.
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -13-
  768.  
  769.     
  770.     
  771.          WARRANTY
  772.     
  773.          This program is provided AS IS without any warranty, expressed
  774.          or implied, including but not limited to the program's
  775.          suitability for any specific purpose.  Considerable testing
  776.          effort has been expended in BLOCKADE's development, but the
  777.          user is responsible for determining the program's suitability
  778.          for use.  The user assumes full risk as to the results of using
  779.          this package.  In no event shall Indusoft be liable for any
  780.          consequential damages arising from the use, or inability to use
  781.          these routines.
  782.     
  783.          The idea of shareware with its low cost distribution of quality
  784.          programs can be of great value to computer users.  BLOCKADE
  785.          follows in that tradition.
  786.     
  787.                           THANK YOU FOR YOUR SUPPORT!
  788.     
  789.     
  790.     
  791.     
  792.          -------------------- REGISTRATION BENEFITS ------------------------
  793.     
  794.     
  795.          Registration allows Indusoft to continue improving BLOCKADE and
  796.          to develop new products for the computing community.  Future
  797.          improvements for BLOCKADE include..
  798.     
  799.          *  Adding serial numbers or other data after linking. This will
  800.             allow you to have a plain vanilla EXE file which you customize
  801.             prior to shipment.  (COMPLETED in release 2).
  802.     
  803.          *  The ability to embed codes for multiple files, allowing a
  804.             master program to check both itself and subordinates.
  805.     
  806.          *  Ideas that you, my customers submit.
  807.     
  808.          Blockade registration only comes in 2 versions, described below:
  809.     
  810.          License to use the current and all future
  811.          shareware versions for private use ...................... $ 10
  812.     
  813.          License for business and commercial use,
  814.          (includes full source code and license to
  815.           embed object code in your product)  .................... $ 30
  816.     
  817.     
  818.          Please make checks or money orders payable to:
  819.     
  820.                          Indusoft Corp.
  821.                          PO Box 26747
  822.                       Greenville, SC  29616-1747
  823.  
  824.  
  825.  
  826.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -14-
  827.  
  828.     
  829.     
  830.                        REGISTRATION - ORDER FORM
  831.                       ============================
  832.     
  833.     
  834.     
  835.          Please Register BLOCKADE as follows:
  836.     
  837.     
  838.                       Shareware version  ($10.00)   ______
  839.     
  840.                       Commercial version ($30.00)   ______
  841.     
  842.     
  843.          Send applicable material to:
  844.     
  845.          Name: ___________________________________  Phone:_____________
  846.     
  847.          Company: _____________________________________________________
  848.     
  849.          Address: _____________________________________________________
  850.     
  851.          Address: _____________________________________________________
  852.     
  853.          City, State, Zip: ____________________________________________
  854.     
  855.     
  856.          Please specify compiler & version you are using:
  857.          
  858.          Turbo C _____  Turbo/Borland C++ _____   Microsoft C _____
  859.          
  860.     
  861.          Where did you learn about our program?
  862.     
  863.          ______________________________________________________________
  864.     
  865.          What products are you using BLOCKADE for?
  866.     
  867.          ______________________________________________________________
  868.     
  869.          How can we improve BLOCKADE?
  870.     
  871.          ______________________________________________________________
  872.     
  873.          ______________________________________________________________
  874.     
  875.          ______________________________________________________________
  876.     
  877.     
  878.          Please forward check or money order payable to:
  879.     
  880.                           Indusoft Corp.
  881.                           PO Box  26747
  882.                        Greenville, SC  29616-1747
  883.     
  884.  
  885.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -15-
  886.  
  887.     
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.              Blockade, (C) Copyright 1991-92 Indusoft Corp.  page -16-
  945.  
  946.  
  947.  
  948.          ----------------end-of-author's-documentation---------------
  949.  
  950.                          Software Library Information:
  951.  
  952.                     This disk copy provided as a service of
  953.  
  954.                            Public (software) Library
  955.  
  956.          We are not the authors of this program, nor are we associated
  957.          with the author in any way other than as a distributor of the
  958.          program in accordance with the author's terms of distribution.
  959.  
  960.          Please direct shareware payments and specific questions about
  961.          this program to the author of the program, whose name appears
  962.          elsewhere in  this documentation. If you have trouble getting
  963.          in touch with the author,  we will do whatever we can to help
  964.          you with your questions. All programs have been tested and do
  965.          run.  To report problems,  please use the form that is in the
  966.          file PROBLEM.DOC on many of our disks or in other written for-
  967.          mat with screen printouts, if possible.  PsL cannot debug pro-
  968.          programs over the telephone, though we can answer questions.
  969.  
  970.          Disks in the PsL are updated  monthly,  so if you did not get
  971.          this disk directly from the PsL, you should be aware that the
  972.          files in this set may no longer be the current versions. Also,
  973.          if you got this disk from another vendor and are having prob-
  974.          lems,  be aware that  some files may have become corrupted or
  975.          lost by that vendor. Get a current, working disk from PsL.
  976.  
  977.          For a copy of the latest monthly software library newsletter
  978.          and a list of the 4,000+ disks in the library, call or write
  979.  
  980.                            Public (software) Library
  981.                                P.O.Box 35705 - F
  982.                             Houston, TX 77235-5705
  983.  
  984.                                 1-800-2424-PSL
  985.                              MC/Visa/AmEx/Discover
  986.  
  987.                           Outside of U.S. or in Texas
  988.                           or for general information,
  989.                               Call 1-713-524-6394
  990.  
  991.  
  992.